今天,來到了賽程第八天。
小編分身無數,一邊鐵人賽;一邊在自己的blog,補上所學筆記,一邊學新東西。
昨天,小編才做好關於 cookie 的筆記,就累到翻了。
現在,己經下午了,趕緊來po文吧!
今天講的部份是檔案系統,學會的話,可以使用node.js進行文件的 聽(?) 說(?) 讀 寫...
前言真是... 趕快來看看吧!
Node.js 的 fs module ,是用來操作實體檔案,可以同步或非同步存取檔案系統操作。
一般建議使用 非同步存取 檔案,性能高、速度快、無阻塞。
我們用
fs.readFile(fileName [,options], callback)
可以讀取檔案。
參數:
不多說,讓我們來看看例子:
首先,我們先任意建立一個TestFile.txt檔案,內容如下:
var fs = require('fs');
fs.readFile('TestFile.txt', function (err, data) {
if (err) throw err;
console.log(data.toString());
});
如上,我們執行完讀取檔案操作,它會執行 function,如果有錯誤,會回傳錯誤;成功,會回傳所讀取的檔案資料。如圖:
雖然,常用的是非同步讀取檔案,但,我們也可以看看,如何同步讀取檔案。
var fs = require('fs');
var data = fs.readFileSync('dummyfile.txt', 'utf8');
console.log(data);
fs.writeFile() 寫入檔案,如果檔案存在,會覆寫原本檔案資料;否則會自動新增檔案並寫入資料。
我們用
fs.writeFile(filename, data[, options], callback)
可以寫入檔案。
參數:
● fileName: 檔案的完整路徑及檔名,格式字串。
● data: 要寫入的檔案內容。
● options: options 可能是一個物件或字串,包含"編碼"及"flag"。這裡預設的編碼是 utf8 , flag是 “w"。
● call back: 只帶一個錯誤參數err的function,當我們執行writeFile完成時, 要做的事。例如: 寫入成功的訊息顯示;失敗時,丟出err。
var fs = require('fs');
fs.writeFile('test.txt', '您好嗎?', function (err) {
if (err)
console.log(err);
else
console.log('Write operation complete.');
});
這裡例子裡,我們新增了原本不存在的 test.txt檔案,並且寫入 “您好嗎?"。如果成功會輸出操作成功的訊息。如圖:
我們可以看到資料夾裡,新增了test.txt檔案,打開來看內容,確實被寫入了!
如果,我們要新增內容至檔案(不覆蓋),該如何做呢?同樣方式,同樣的參數,我們可以用fs.appendFile()
var fs = require('fs');
fs.appendFile('test.txt', '我很好!', function (err) {
if (err)
console.log(err);
else
console.log('Append operation complete.');
});
我們執行,並且打開檔案看看,如圖:
另外,我們也可以開啟檔案,進行讀/寫操作。
我們用
fs.open(path, flags[, mode], callback)
開啟檔案。
參數:
我們看看例子:
opfile.js
var fs = require('fs');
fs.open('TestFile.txt', 'r+', function (err,fd) {
if (err) throw err;
console.log('檔案開啟成功!');
});
執行結果,如圖:
flag:
而與fs.open有關的,即我們要在open操作時,也讀取文件時,該怎麼做呢?
我們可以在fs.open時,執行 fs.read()。
我們用
fs.read(fd, buffer, offset, length, position, callback)
讀取open檔案。
參數:
我們來看看例子:
var fs = require('fs');
fs.open('TestFile.txt', 'r', function (err, fd) {
if (err) {
return console.error(err);
}
var buffr = new Buffer(1024);
fs.read(fd, buffr, 0, buffr.length, 0, function (err, bytes) {
if (err) throw err;
// Print only read bytes to avoid junk.
if (bytes > 0) {
console.log(bytes+" 字元被讀取");
console.log(buffr.slice(0, bytes).toString());
}
// Close the opened file.
fs.close(fd, function (err) {
if (err) throw err;
});
});
});
從這個例子裡,我們做了fs.open(), fs.read(), 那麼, 我們也看到了 fs.close() 關閉檔案的使用方法。
fs.close(fd, callback)
其中,參數:
● fd: 透過 fs.open() 方法返回的文件描述符。
● call back: 只帶一個錯誤參數err的function,當我們執行close完成時, 要做的事。例如: 失敗時,丟出err。
我們執行上方的程式,結果如圖:
我們可以用
fs.unlink(path, callback);
刪除存在的文件。
參數:
path: 檔案路徑。
callback: 只帶一個錯誤參數err的function,當我們執行unlink完成時, 要做的事。例如: 刪除成功的訊息顯示;失敗時,丟出err。
讓我們刪除剛才所建立的 TestFile.txt 檔案。
var fs = require('fs');
fs.unlink('test.txt', function () {
console.log('已經刪除檔案!');
});
其他,針對檔案系統操作,還有一些常用的
Method | Description |
---|---|
fs.readFile(fileName [,options], callback) | 讀取現有文件。 |
fs.writeFile(filename, data[, options], callback) | 寫入文件。如果存在則覆蓋,否則建立一個新的文件。 |
fs.open(path, flags[, mode], callback) | 打開文件進行閱讀或寫入。 |
fs.rename(oldPath, newPath, callback) | 重命名現有文件。 |
fs.stat(path, callback) | 返回包含重要文件統計信息的fs.stat 物件。 |
fs.rmdir(path, callback) | 重命名現有目錄。 |
fs.mkdir(path[, mode], callback) | 創建新目錄。 |
fs.readdir(path, callback) | 讀取指定目錄的內容。 |
fs.utimes(path, atime, mtime, callback) | 更改文件的時間標記。 |
fs.exists(path, callback) | 確定指定的文件是否存在。 |
fs.access(path[, mode], callback) | 測試指定文件的用戶權限。 |
fs.appendFile(file, data[, options], callback) | 將新內容附加到現有文件。 |
也可以上去官網看相關文件: fs module
小弟嘗試用 fs.writeFile 將 '今天天氣很好!' 字串寫入
test.txt 檔,結果得到有名的 UTF-8字符'EF BF BD' 錯誤。
請大大指點一下。